package com.cg.asm.body.dao.roles;

import com.cg.asm.body.domain.dto.roles.RoleFunDTO;
import com.cg.asm.body.domain.dto.roles.RoleFunPointsDTO;
import com.cg.asm.body.domain.vo.roles.RoleFunPointsVO;
import com.cg.asm.body.domain.vo.roles.RoleFunTreeVO;
import com.cg.asm.body.domain.vo.roles.RolePointsSaveVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public interface RoleFunMapper {

    /**
     * 根据角色ID查询已经分配的功能清单编码
     *
     * @param roleId
     * @return
     */
    List<String> getRoleFunListCodes(@Param("roleId") String roleId);

    /**
     * 根据菜单编码获取所有可分配的功能点信息
     *
     * @param funListCode
     * @return
     */
    List<RoleFunPointsVO> getMenuPointsData(@Param("funListCode") String funListCode);

    /**
     * 获取功能清单设置的默认选中的功能点
     *
     * @return
     */
    List<String> getRoleFunPointsDefault(@Param("funListCode") String funListCode);

    /**
     * 根据角色Id和功能清单编码获取选中功能点
     *
     * @param roleId
     * @param funListCode
     * @return
     */
    List<String> getRoleFunPointsCode(@Param("roleId") String roleId, @Param("funListCode") String funListCode);

    /**
     * 根据当前角色Id查询所有已设置功能清单的所有功能点
     *
     * @param roleId
     * @param funListCodes
     * @return
     */
    List<RolePointsSaveVO> getroleFunPoints(@Param("roleId") String roleId, @Param("funListCodes") List<String> funListCodes);

    /**
     * 获取所有功能清单默认功能点
     *
     * @return
     */
    List<RolePointsSaveVO> getDefaultPointsByFunListCodes(@Param("funListCodes") List<String> funListCodes);

    /**
     * 根据角色ID删除已经分配的功能清单
     *
     * @param roleId
     */
    void delRoleFun(@Param("roleId") String roleId);

    /**
     * 根据角色编码删除菜单功能点信息
     *
     * @param roleId
     */
    void delRoleFunPoints(@Param("roleId") String roleId);

    /**
     * 保存角色与功能清单关联信息
     *
     * @param roleFunDTO
     */
    void saveRoleFun(RoleFunDTO roleFunDTO);

    /**
     * 保存角色功能点信息
     *
     * @param roleFunPointsDTO
     */
    void saveRoleFunPoints(RoleFunPointsDTO roleFunPointsDTO);

    /**
     * 根据用户Id获取用户所有管理角色的功能清单信息
     *
     * @param userId
     * @return
     */
    List<RoleFunTreeVO> getUserManagerFunList(@Param("userId") String userId);

    /**
     * 获取所有可执行的功能清单
     *
     * @return
     */
    List<RoleFunTreeVO> getFunListByExecute();

    /**
     * 获取所有分组类功能清单
     *
     * @return
     */
    List<RoleFunTreeVO> getFunListByGroup();
}
